﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Web.Services;

namespace hotelservices
{
    // NOTA: puede usar el comando "Rename" del menú "Refactorizar" para cambiar el nombre de interfaz "IService1" en el código y en el archivo de configuración a la vez.
    [ServiceContract(Namespace = "http://localhost/")]    
    public interface IService1
    {
        // TODO: agregue aquí sus operaciones de servicio

        //Login

        [OperationContract]
        bool login(string email, string contrasena);
        
        //Get Operations

        [OperationContract]
        AgenciaDC getAgenciaByEmail(string email);
        
        [OperationContract]
        List<AgenciaDC> getAllAgencias();

        [OperationContract]
        HotelDC getHotelById(int id);

        [OperationContract]
        List<HotelDC> getAllHotel();

        [OperationContract]
        CuartoDC getCuartoById(int id);

        [OperationContract]
        List<CuartoDC> getCuartosByReserva(int fk_reserva);

        [OperationContract]
        ReservasDC getReservaById(int id);

        [OperationContract]
        List<ReservasDC> getReservasByAgencia(int idagencia);

        [OperationContract]
        UsuariosDC getUsuarioById(int id);

        [OperationContract]
        List<UsuariosDC> getAllUsuarios();

        //Set Operations

        [OperationContract]
        bool setReservas(ReservasDC reserva);

        [OperationContract]
        bool setUsuarios(UsuariosDC usuario);

        [OperationContract]
        bool setCuarto(CuartoDC cuartos);

        [OperationContract]
        bool setAgencia(AgenciaDC agencias);

        [OperationContract]
        bool setHotel(HotelDC hoteles);

        //Update Operations

        [OperationContract]
        bool updateReservas(ReservasDC reserva);

        [OperationContract]
        bool updateUsuarios(UsuariosDC usuario);

        [OperationContract]
        bool updateCuarto(CuartoDC cuartos);

        [OperationContract]
        bool updateAgencia(AgenciaDC agencias);

        [OperationContract]
        bool updateHotel(HotelDC hoteles);

    }

    [DataContract]
    public class AgenciaDC
    {
        long idagencia;
        string nombre;
        string email;
        string contrasena;

        [DataMember]
        public long Idagencia
        {
            get { return idagencia;  }
            set {idagencia = value; }
        }

        [DataMember]
        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        [DataMember]
        public string Email
        {
            get { return email; }
            set { email = value; }
        }

        [DataMember]
        public string Contrasena
        {
            get { return contrasena; }
            set { contrasena = value; }
        }

        [DataMember]
        public ICollection<reservas> reservas;

    }

    [DataContract]
    public class HotelDC
    {
        long idhotel;
        string nombre;
        int numpisos;
        int habporpiso;

        [DataMember]
        public long Idhotel
        {
            get { return idhotel; }
            set { idhotel = value; }
        }

        [DataMember]
        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        [DataMember]
        public int Numpisos
        {
            get { return numpisos; }
            set { numpisos = value; }
        }

        [DataMember]
        public int Habporpiso
        {
            get { return habporpiso; }
            set { habporpiso = value; }
        }

        [DataMember]
        public ICollection<CuartoDC> cuarto;
    }

    [DataContract]
    public class CuartoDC
    {
        long idcuarto;
        int capacidad;
        double precio;
        int piso;
        long fk_hotel;
        long fk_reserva;
        int numhab;

        [DataMember]
        public long Idcuarto
        {
            get { return idcuarto; }
            set { idcuarto = value; }
        }

        [DataMember]
        public int Capacidad
        {
            get { return capacidad; }
            set { capacidad = value; }
        }

        [DataMember]
        public double Precio
        {
            get { return precio; }
            set { precio = value; }
        }

        [DataMember]
        public int Piso
        {
            get { return piso; }
            set { piso = value; }
        }

        [DataMember]
        public long Fk_hotel
        {
            get { return fk_hotel; }
            set { fk_hotel = value; }
        }

        [DataMember]
        public long Fk_reserva
        {
            get { return fk_reserva; }
            set { fk_reserva = value; }
        }

        [DataMember]
        public int Numhab
        {
            get { return numhab; }
            set { numhab = value; }
        }

    }

    [DataContract]
    public class ReservasDC
    {
        long idreserva;
        DateTime fecha_ingreso;
        DateTime fecha_salida;
        double total;
        double abono;
        long fk_agencia;
        long fk_usuario;

        [DataMember]
        public long Idreserva
        {
            get { return idreserva; }
            set { idreserva = value; }
        }

        [DataMember]
        public DateTime Fecha_ingreso
        {
            get { return fecha_ingreso; }
            set { fecha_ingreso = value; }
        }

        [DataMember]
        public DateTime Fecha_salida
        {
            get { return fecha_salida; }
            set { fecha_salida = value; }
        }

        [DataMember]
        public double Total
        {
            get { return total; }
            set { total = value; }
        }

        [DataMember]
        public double Abono
        {
            get { return abono; }
            set { abono = value; }
        }

        [DataMember]
        public long Fk_agencia
        {
            get { return fk_agencia; }
            set { fk_agencia = value; }
        }

        [DataMember]
        public long Fk_usuario
        {
            get { return fk_usuario; }
            set { fk_usuario = value; }
        }

    }

    [DataContract]
    public class UsuariosDC
    {
        long idusuario;
        string nombre;
        string apellidos;
        string pais;
        string direccion;
        string ciudad;
        string estado;
        string telefono;
        string email;

        [DataMember]
        public long Idusuario
        {
            get { return idusuario;}
            set { idusuario=value;} 
        }

        [DataMember]
        public string Nombre 
        { 
            get { return nombre;} 
            set { nombre=value;} 
        }

        [DataMember]
        public string Apellidos 
        {
            get { return apellidos; }
            set { apellidos=value; }
        }

        [DataMember]
        public string Pais
        {
            get { return pais; }
            set { pais = value; }
        }

        [DataMember]
        public string Direccion
        {
            get { return direccion; }
            set { direccion = value; }
        }

        [DataMember]
        public string Ciudad
        {
            get { return ciudad; }
            set { ciudad = value; }
        }

        [DataMember]
        public string Estado
        {
            get { return estado; }
            set { estado = value; }
        }

        [DataMember]
        public string Telefono
        {
            get { return telefono; }
            set { telefono = value; }
        }

        [DataMember]
        public string Email
        {
            get { return email; }
            set { email = value; }
        }

    }
}
